#include <stdio.h>

// wezly
#define MAX_NODES_NR 256 // maksymalna ilosc wezlow
#define new(type) (type *)calloc(sizeof(type), 1)
#define false 0
#define true (! false)
typedef short int bool; // typ logiczny 
struct Info {
  int h;
};
typedef struct Info info;
typedef struct Node *link; // typ danych dowiazanie
typedef struct Node node; // typ danych wezel
struct Node { // dwuczesciowa struktura wezla
  info item;
  link next;
};	
int nodes_nr; // liczba wezlow
node nodes_tab[MAX_NODES_NR]; // tablica wezlow rozmiaru NodesNr

// lista cykliczna
link head; // glowa listy
void node_ins(node ); // wstawienie wezla do listy

int main() 
{
  int i;
  link t; // iterator
  nodes_nr = 13;
  for (i = 1; i < nodes_nr; i++) // dane wezlow - godziny dla zegara
    nodes_tab[i].item.h = i;
  for (i = 12; i > 0; i--) // konstrukcja zegara 12 godzinnego
    node_ins(nodes_tab[i]);
  t = head; // obrot 24 godzinny
  for (i = 1; i < 2*nodes_nr-1; i++) {
    t = t->next; // przejscie do nastepnego wezla
    printf("%i ", t->item.h);   
  }
  return 0;
}

// funkcje dla listy cyklicznej
void node_ins(node a) 
{
  link t = new(node);
  if (head == NULL) {
    head = t;
    head->item = a.item;
    head->next = head;
  }
  else {
    t->item = a.item;
    t->next = head->next;
    head->next = t; 
  }
}
